/*
** FileName:main.c
** Author:Creat
** Time:下午4:04
** Date:2024/5/26
**/

#include <stdio.h>
#include <malloc.h>
#include "my_math.h"
#include "string.h"
int maximumLength(char* s) {
    int s_length = strlen(s);
    int letters_num[26];  // 存放字母数目
    int* letters_pos[26]; // 存放字母位置
    int letters_special_str_length[26]; //字母中特殊子字符串长度
    // 初始化
    memset(letters_num, 0, sizeof(int) * 26); // 初始化字母数目
    memset(letters_special_str_length, -1, sizeof(int) * 26); // 初始化字母中特殊子字符串长度
    // 初始化字母位置
    for(int i = 0;i < 26;i++){
        letters_pos[i] = (int *)malloc(sizeof(int) * 50);
        memset(letters_pos[i], 0, sizeof(int) * 50);
    }
    // 计数，并初始化letters_num同时记录字母位置
    for(int i = 0;i < s_length;i++){
        int index = s[i] - 'a';
        if(letters_num[index] == 0){
            letters_pos[index] = (int *)malloc(sizeof(int) * 50);
            memset(letters_pos[index], 0, sizeof(int) * 50);
        }else;
        letters_pos[index][letters_num[index]] = i;
        letters_num[index]++;
    }

    for(int i = 0;i < 26;i++){
        if(letters_num[i] >= 3){
            for(int width = letters_num[i] - 2;width >= 1;width--){
                int special_cnt = 0;
                for(int start = 0, end = letters_num[i] - width;start <= end;start++){
                    if(letters_pos[i][start + width - 1] - letters_pos[i][start] + 1 == width){
                        special_cnt++;
                    }else;
                }
                if(special_cnt >= 3){
                    letters_special_str_length[i] = width;
                    break;
                }else;
            }
        }else;
    }
    int max = -1;
    for(int i = 0;i < 26;i++){
        if(max < letters_special_str_length[i]){
            max = letters_special_str_length[i];
        }else;
    }
    return max;
}
int main(void){
    char s[] = "aaabcaaabcaaabc";
    printf("%d", maximumLength(s));
    return 0;
}